{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "OES7RFI9CDR5",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 28396,
     "status": "ok",
     "timestamp": 1652101547454,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "OES7RFI9CDR5",
    "outputId": "495c9b2d-1489-42a2-c81b-50550e1c31c1"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mounted at /content/gdrive\n"
     ]
    }
   ],
   "source": [
    "from google.colab import drive\n",
    "drive.mount('/content/gdrive')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "edd2a3c6-6abe-4330-9228-547b4db69371",
   "metadata": {
    "executionInfo": {
     "elapsed": 3217,
     "status": "ok",
     "timestamp": 1652101572543,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "edd2a3c6-6abe-4330-9228-547b4db69371"
   },
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow.keras import datasets,layers,models,optimizers\n",
    "from tensorflow import keras\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b4c4fa64-b157-4b25-8a63-057cf94dd93a",
   "metadata": {
    "executionInfo": {
     "elapsed": 8386,
     "status": "ok",
     "timestamp": 1652101611385,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "b4c4fa64-b157-4b25-8a63-057cf94dd93a"
   },
   "outputs": [],
   "source": [
    "df_BD = pd.read_csv('/content/gdrive/MyDrive/Lit/Lit_Submission/data/peptide-mhc-binding-affinity.csv')\n",
    "df_features = pd.read_csv('/content/gdrive/MyDrive/Lit/Lit_Submission/data/trait.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "pcitsp4BCo1j",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 467
    },
    "executionInfo": {
     "elapsed": 26,
     "status": "ok",
     "timestamp": 1652101613525,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "pcitsp4BCo1j",
    "outputId": "221da4ca-031b-4914-9dfe-556af4a95598"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <div id=\"df-6e2151cd-2339-4d1e-8867-3cd45f99ea3c\">\n",
       "    <div class=\"colab-df-container\">\n",
       "      <div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>215</th>\n",
       "      <th>216</th>\n",
       "      <th>217</th>\n",
       "      <th>218</th>\n",
       "      <th>219</th>\n",
       "      <th>220</th>\n",
       "      <th>221</th>\n",
       "      <th>222</th>\n",
       "      <th>223</th>\n",
       "      <th>224</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5950</td>\n",
       "      <td>89.09</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>63.3</td>\n",
       "      <td>61.8</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.4</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5950</td>\n",
       "      <td>89.09</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>63.3</td>\n",
       "      <td>61.8</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>5</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5950</td>\n",
       "      <td>89.09</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>63.3</td>\n",
       "      <td>61.8</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.4</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>5950</td>\n",
       "      <td>89.09</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>63.3</td>\n",
       "      <td>61.8</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.4</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5862</td>\n",
       "      <td>121.16</td>\n",
       "      <td>-2.5</td>\n",
       "      <td>64.3</td>\n",
       "      <td>75.3</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>5</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>222870</th>\n",
       "      <td>6322</td>\n",
       "      <td>174.20</td>\n",
       "      <td>-4.2</td>\n",
       "      <td>128.0</td>\n",
       "      <td>176.0</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.4</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>222871</th>\n",
       "      <td>5951</td>\n",
       "      <td>105.09</td>\n",
       "      <td>-3.1</td>\n",
       "      <td>83.6</td>\n",
       "      <td>72.6</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.6</td>\n",
       "      <td>3</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>222872</th>\n",
       "      <td>6305</td>\n",
       "      <td>204.22</td>\n",
       "      <td>-1.1</td>\n",
       "      <td>79.1</td>\n",
       "      <td>245.0</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>15</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>3</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>222873</th>\n",
       "      <td>6305</td>\n",
       "      <td>204.22</td>\n",
       "      <td>-1.1</td>\n",
       "      <td>79.1</td>\n",
       "      <td>245.0</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>15</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.6</td>\n",
       "      <td>3</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>222874</th>\n",
       "      <td>6057</td>\n",
       "      <td>181.19</td>\n",
       "      <td>-2.3</td>\n",
       "      <td>83.6</td>\n",
       "      <td>176.0</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>13</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>222875 rows × 225 columns</p>\n",
       "</div>\n",
       "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-6e2151cd-2339-4d1e-8867-3cd45f99ea3c')\"\n",
       "              title=\"Convert this dataframe to an interactive table.\"\n",
       "              style=\"display:none;\">\n",
       "        \n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
       "       width=\"24px\">\n",
       "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
       "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
       "  </svg>\n",
       "      </button>\n",
       "      \n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      flex-wrap:wrap;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "      <script>\n",
       "        const buttonEl =\n",
       "          document.querySelector('#df-6e2151cd-2339-4d1e-8867-3cd45f99ea3c button.colab-df-convert');\n",
       "        buttonEl.style.display =\n",
       "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "        async function convertToInteractive(key) {\n",
       "          const element = document.querySelector('#df-6e2151cd-2339-4d1e-8867-3cd45f99ea3c');\n",
       "          const dataTable =\n",
       "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                     [key], {});\n",
       "          if (!dataTable) return;\n",
       "\n",
       "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "            + ' to learn more about interactive tables.';\n",
       "          element.innerHTML = '';\n",
       "          dataTable['output_type'] = 'display_data';\n",
       "          await google.colab.output.renderOutput(dataTable, element);\n",
       "          const docLink = document.createElement('div');\n",
       "          docLink.innerHTML = docLinkHtml;\n",
       "          element.appendChild(docLink);\n",
       "        }\n",
       "      </script>\n",
       "    </div>\n",
       "  </div>\n",
       "  "
      ],
      "text/plain": [
       "           0       1    2      3      4  5  6  7   8  9  ...  215  216  217  \\\n",
       "0       5950   89.09 -3.0   63.3   61.8  2  3  1   6  1  ...    5    2    1   \n",
       "1       5950   89.09 -3.0   63.3   61.8  2  3  1   6  1  ...    7    2    2   \n",
       "2       5950   89.09 -3.0   63.3   61.8  2  3  1   6  1  ...    5    2    1   \n",
       "3       5950   89.09 -3.0   63.3   61.8  2  3  1   6  1  ...    6    2    1   \n",
       "4       5862  121.16 -2.5   64.3   75.3  3  4  2   7  1  ...    7    2    2   \n",
       "...      ...     ...  ...    ...    ... .. .. ..  .. ..  ...  ...  ...  ...   \n",
       "222870  6322  174.20 -4.2  128.0  176.0  4  4  5  12  1  ...    6    2    1   \n",
       "222871  5951  105.09 -3.1   83.6   72.6  3  4  2   7  1  ...    7    2    1   \n",
       "222872  6305  204.22 -1.1   79.1  245.0  3  3  3  15  1  ...    7    2    2   \n",
       "222873  6305  204.22 -1.1   79.1  245.0  3  3  3  15  1  ...    7    2    1   \n",
       "222874  6057  181.19 -2.3   83.6  176.0  3  4  3  13  1  ...    0    0    0   \n",
       "\n",
       "        218  219  220  221  222  223  224  \n",
       "0         1    1    0    0  0.4    1    2  \n",
       "1         1    2    0    0  0.6    5   10  \n",
       "2         1    1    0    0  0.4    1    2  \n",
       "3         1    1    0    1  0.4    2    8  \n",
       "4         1    2    0    0  0.6    5   10  \n",
       "...     ...  ...  ...  ...  ...  ...  ...  \n",
       "222870    1    1    0    1  0.4    2    8  \n",
       "222871    1    1    0    2  0.6    3   10  \n",
       "222872    1    1    1    0  0.6    3   10  \n",
       "222873    1    1    0    2  0.6    3   10  \n",
       "222874    0    0    0    0  0.0    0    0  \n",
       "\n",
       "[222875 rows x 225 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d2360b32-c134-415f-b76c-06e549f086b0",
   "metadata": {
    "executionInfo": {
     "elapsed": 1408,
     "status": "ok",
     "timestamp": 1652101620583,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "d2360b32-c134-415f-b76c-06e549f086b0"
   },
   "outputs": [],
   "source": [
    "df_BD = df_BD.loc[:,['allele','peptide','measurement_value']]\n",
    "df_M = df_BD.loc[:,['measurement_value']]\n",
    "L = df_M['measurement_value'].values.tolist() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "df7f8348-f5d9-4139-b12c-6fc7484bd115",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 583,
     "status": "ok",
     "timestamp": 1652101623118,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "df7f8348-f5d9-4139-b12c-6fc7484bd115",
    "outputId": "957f894a-d6ee-414c-eec4-1691f048b9f8"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "223234"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import math\n",
    "# math.log(0.0) 是一个不合法的值需要注意\n",
    "# 1-log(min(MS,50000))/log(50000)\n",
    "Lis = []\n",
    "for MS in L:\n",
    "    if MS == 0.0:\n",
    "        Lis.append(MS)\n",
    "    else:\n",
    "        value = 1-math.log(min(MS,50000))/math.log(50000)\n",
    "        Lis.append(value)\n",
    "len(Lis)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "da450452-4f96-4350-9f82-37b2afb599e2",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 423
    },
    "executionInfo": {
     "elapsed": 393,
     "status": "ok",
     "timestamp": 1652101625921,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "da450452-4f96-4350-9f82-37b2afb599e2",
    "outputId": "fd4089f8-9d4c-42cc-9145-ebb9a865401f"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <div id=\"df-0d38d51e-d5fb-49bd-9514-ecd932a11b78\">\n",
       "    <div class=\"colab-df-container\">\n",
       "      <div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>allele</th>\n",
       "      <th>peptide</th>\n",
       "      <th>measurement_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>BoLA-1*21:01</td>\n",
       "      <td>AENDTLVVSV</td>\n",
       "      <td>0.171512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>BoLA-1*21:01</td>\n",
       "      <td>NQFNGGCLLV</td>\n",
       "      <td>0.353937</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>BoLA-2*08:01</td>\n",
       "      <td>AAHCIHAEW</td>\n",
       "      <td>0.718615</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>BoLA-2*08:01</td>\n",
       "      <td>AAKHMSNTY</td>\n",
       "      <td>0.337385</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>BoLA-2*08:01</td>\n",
       "      <td>DSYAYMRNGW</td>\n",
       "      <td>0.935937</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223229</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>RRNYFTAEV</td>\n",
       "      <td>0.574375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223230</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>SRLLSLWCI</td>\n",
       "      <td>0.212813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223231</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>WLAFLSFSY</td>\n",
       "      <td>0.212813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223232</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>WMMAMRYPI</td>\n",
       "      <td>0.425625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223233</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>YQRTRALV</td>\n",
       "      <td>0.361562</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>223234 rows × 3 columns</p>\n",
       "</div>\n",
       "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-0d38d51e-d5fb-49bd-9514-ecd932a11b78')\"\n",
       "              title=\"Convert this dataframe to an interactive table.\"\n",
       "              style=\"display:none;\">\n",
       "        \n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
       "       width=\"24px\">\n",
       "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
       "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
       "  </svg>\n",
       "      </button>\n",
       "      \n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      flex-wrap:wrap;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "      <script>\n",
       "        const buttonEl =\n",
       "          document.querySelector('#df-0d38d51e-d5fb-49bd-9514-ecd932a11b78 button.colab-df-convert');\n",
       "        buttonEl.style.display =\n",
       "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "        async function convertToInteractive(key) {\n",
       "          const element = document.querySelector('#df-0d38d51e-d5fb-49bd-9514-ecd932a11b78');\n",
       "          const dataTable =\n",
       "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                     [key], {});\n",
       "          if (!dataTable) return;\n",
       "\n",
       "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "            + ' to learn more about interactive tables.';\n",
       "          element.innerHTML = '';\n",
       "          dataTable['output_type'] = 'display_data';\n",
       "          await google.colab.output.renderOutput(dataTable, element);\n",
       "          const docLink = document.createElement('div');\n",
       "          docLink.innerHTML = docLinkHtml;\n",
       "          element.appendChild(docLink);\n",
       "        }\n",
       "      </script>\n",
       "    </div>\n",
       "  </div>\n",
       "  "
      ],
      "text/plain": [
       "              allele     peptide  measurement_value\n",
       "0       BoLA-1*21:01  AENDTLVVSV           0.171512\n",
       "1       BoLA-1*21:01  NQFNGGCLLV           0.353937\n",
       "2       BoLA-2*08:01   AAHCIHAEW           0.718615\n",
       "3       BoLA-2*08:01   AAKHMSNTY           0.337385\n",
       "4       BoLA-2*08:01  DSYAYMRNGW           0.935937\n",
       "...              ...         ...                ...\n",
       "223229   SLA-3*02:02   RRNYFTAEV           0.574375\n",
       "223230   SLA-3*02:02   SRLLSLWCI           0.212813\n",
       "223231   SLA-3*02:02   WLAFLSFSY           0.212813\n",
       "223232   SLA-3*02:02   WMMAMRYPI           0.425625\n",
       "223233   SLA-3*02:02    YQRTRALV           0.361562\n",
       "\n",
       "[223234 rows x 3 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s_ = pd.DataFrame(np.array(Lis),columns=['measurement_value'])\n",
    "df_BD = pd.concat([df_BD.loc[:,['allele','peptide']],s_] , axis=1)\n",
    "df_BD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "bf7e99c9-b1bd-4334-aaeb-cd4965cb8dfd",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 423
    },
    "executionInfo": {
     "elapsed": 3737,
     "status": "ok",
     "timestamp": 1652101632858,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "bf7e99c9-b1bd-4334-aaeb-cd4965cb8dfd",
    "outputId": "bccc21b0-4819-422a-882b-2e954d4ed40a"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <div id=\"df-6e23553e-de37-4687-b83f-0d1eedff93a9\">\n",
       "    <div class=\"colab-df-container\">\n",
       "      <div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>allele</th>\n",
       "      <th>peptide</th>\n",
       "      <th>measurement_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>BoLA-2*12:01</td>\n",
       "      <td>AAHGMGKVGK</td>\n",
       "      <td>0.425625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>BoLA-2*12:01</td>\n",
       "      <td>ASFNYGAIK</td>\n",
       "      <td>0.611388</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>BoLA-2*12:01</td>\n",
       "      <td>ASHGMGKVGK</td>\n",
       "      <td>0.425625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>BoLA-2*12:01</td>\n",
       "      <td>ASSHGMGKVGK</td>\n",
       "      <td>0.425625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>BoLA-2*12:01</td>\n",
       "      <td>CIYQITHGK</td>\n",
       "      <td>0.358383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223229</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>RRNYFTAEV</td>\n",
       "      <td>0.574375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223230</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>SRLLSLWCI</td>\n",
       "      <td>0.212813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223231</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>WLAFLSFSY</td>\n",
       "      <td>0.212813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223232</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>WMMAMRYPI</td>\n",
       "      <td>0.425625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>223233</th>\n",
       "      <td>SLA-3*02:02</td>\n",
       "      <td>YQRTRALV</td>\n",
       "      <td>0.361562</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>222875 rows × 3 columns</p>\n",
       "</div>\n",
       "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-6e23553e-de37-4687-b83f-0d1eedff93a9')\"\n",
       "              title=\"Convert this dataframe to an interactive table.\"\n",
       "              style=\"display:none;\">\n",
       "        \n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
       "       width=\"24px\">\n",
       "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
       "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
       "  </svg>\n",
       "      </button>\n",
       "      \n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      flex-wrap:wrap;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "      <script>\n",
       "        const buttonEl =\n",
       "          document.querySelector('#df-6e23553e-de37-4687-b83f-0d1eedff93a9 button.colab-df-convert');\n",
       "        buttonEl.style.display =\n",
       "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "        async function convertToInteractive(key) {\n",
       "          const element = document.querySelector('#df-6e23553e-de37-4687-b83f-0d1eedff93a9');\n",
       "          const dataTable =\n",
       "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                     [key], {});\n",
       "          if (!dataTable) return;\n",
       "\n",
       "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "            + ' to learn more about interactive tables.';\n",
       "          element.innerHTML = '';\n",
       "          dataTable['output_type'] = 'display_data';\n",
       "          await google.colab.output.renderOutput(dataTable, element);\n",
       "          const docLink = document.createElement('div');\n",
       "          docLink.innerHTML = docLinkHtml;\n",
       "          element.appendChild(docLink);\n",
       "        }\n",
       "      </script>\n",
       "    </div>\n",
       "  </div>\n",
       "  "
      ],
      "text/plain": [
       "              allele      peptide  measurement_value\n",
       "16      BoLA-2*12:01   AAHGMGKVGK           0.425625\n",
       "17      BoLA-2*12:01    ASFNYGAIK           0.611388\n",
       "18      BoLA-2*12:01   ASHGMGKVGK           0.425625\n",
       "19      BoLA-2*12:01  ASSHGMGKVGK           0.425625\n",
       "20      BoLA-2*12:01    CIYQITHGK           0.358383\n",
       "...              ...          ...                ...\n",
       "223229   SLA-3*02:02    RRNYFTAEV           0.574375\n",
       "223230   SLA-3*02:02    SRLLSLWCI           0.212813\n",
       "223231   SLA-3*02:02    WLAFLSFSY           0.212813\n",
       "223232   SLA-3*02:02    WMMAMRYPI           0.425625\n",
       "223233   SLA-3*02:02     YQRTRALV           0.361562\n",
       "\n",
       "[222875 rows x 3 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# df_BD，因为我们只选择了那些肽数大于 20 的等位基因\n",
    "allocate = df_BD.loc[:,['allele']]             # 索引的是列\n",
    "lis = allocate['allele'].values.tolist()    # 将dataframe转换成列表\n",
    "\n",
    "ax = []\n",
    "res = []\n",
    "icount = 0\n",
    "for val in lis:\n",
    "#     line = val.split('*')[0]\n",
    "        if val in ax:\n",
    "            pass\n",
    "        else:\n",
    "            ax.append(val)\n",
    "\n",
    "res = []\n",
    "for val in ax:\n",
    "    if lis.count(val)>20:\n",
    "        res.append(val)\n",
    "\n",
    "df_ms = pd.DataFrame()\n",
    "for i in res:\n",
    "    df_1 = df_BD.loc[df_BD['allele'] == i]\n",
    "    df_ms = df_ms.append(df_1)\n",
    "df_ms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "gxIYJzgJovIj",
   "metadata": {
    "id": "gxIYJzgJovIj"
   },
   "outputs": [],
   "source": [
    "df_ms.to_csv('DF_MS')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d07b927a-4401-4980-99a7-0a5fc82e145d",
   "metadata": {
    "id": "d07b927a-4401-4980-99a7-0a5fc82e145d"
   },
   "outputs": [],
   "source": [
    "from __future__ import division\n",
    "from itertools import combinations_with_replacement\n",
    "import numpy as np\n",
    "import math\n",
    "import sys\n",
    "\n",
    "def shuffle_data(X, y, seed=None):\n",
    "    \"\"\" Random shuffle of the samples in X and y \"\"\"\n",
    "    if seed:\n",
    "        np.random.seed(seed)\n",
    "    idx = np.arange(X.shape[0])\n",
    "    np.random.shuffle(idx)\n",
    "    return X[idx], y[idx]\n",
    "def train_test_split(X, y, test_size, shuffle=True, seed=None):\n",
    "    \"\"\" Split the data into train and test sets \"\"\"\n",
    "    if shuffle:\n",
    "        X, y = shuffle_data(X, y, seed)\n",
    "    # Split the training data from test data in the ratio specified in\n",
    "    # test_size\n",
    "    split_i = len(y) - int(len(y) // (1 / test_size))\n",
    "    X_train, X_test = X[:split_i], X[split_i:]\n",
    "    y_train, y_test = y[:split_i], y[split_i:]\n",
    "\n",
    "    return X_train, X_test, y_train, y_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "97235487-13c4-44a2-aad9-51d53540bda7",
   "metadata": {
    "executionInfo": {
     "elapsed": 2570,
     "status": "ok",
     "timestamp": 1652101661539,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "97235487-13c4-44a2-aad9-51d53540bda7"
   },
   "outputs": [],
   "source": [
    "# 数据预处理\n",
    "from sklearn.model_selection import train_test_split\n",
    "y_data = np.array(df_ms.loc[:,['measurement_value']])\n",
    "x_data = np.array(df_features)\n",
    "\n",
    "# 对数据进行归一化处理\n",
    "# 这里我们选择使用(0,1)标准化,\n",
    "max_ = np.max(x_data)\n",
    "min_ = np.min(x_data)\n",
    "x_data = (x_data-min_)/(max_-min_)\n",
    "# Data sets are divided by the module method(proportion 8:2)\n",
    "X_train,X_test,Y_train,Y_test = train_test_split(x_data,y_data,test_size=0.2,random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "80ab8067-0a70-460a-8bd3-b7f598360a12",
   "metadata": {
    "executionInfo": {
     "elapsed": 420,
     "status": "ok",
     "timestamp": 1652101665094,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "80ab8067-0a70-460a-8bd3-b7f598360a12"
   },
   "outputs": [],
   "source": [
    "X_train = X_train.astype('float32')\n",
    "X_test = X_test.astype('float32')\n",
    "# X_train.shape\n",
    "X_test = X_test.reshape(44575,9,25)     # (44575,225)\n",
    "# 现在要解决的一个问题是是否需要reshape强行用2D,如果不强行reshape可能需要回归到以前不使用降维？\n",
    "X_train = X_train.reshape(178300,9,25)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "jpIgslWF7tes",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 349,
     "status": "ok",
     "timestamp": 1652101690410,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "jpIgslWF7tes",
    "outputId": "3e78db86-05f6-48bc-8973-77a2398fea51"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(44575, 1)\n",
      "(178300, 1)\n"
     ]
    }
   ],
   "source": [
    "print(Y_test.shape)\n",
    "print(Y_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07db928a-842f-490f-a1a8-c04a10eb1c5d",
   "metadata": {
    "id": "07db928a-842f-490f-a1a8-c04a10eb1c5d"
   },
   "source": [
    "### RNN模型构建(基础模型)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d6b50583-7e5f-423c-9e31-90a0d97bf071",
   "metadata": {
    "id": "d6b50583-7e5f-423c-9e31-90a0d97bf071"
   },
   "outputs": [],
   "source": [
    "class RNN():\n",
    "    def __init__(self,put_dims,put_size,name):\n",
    "        '''\n",
    "        :put_dims:输入向量维度  225\n",
    "        :put_size:输入大小\n",
    "        '''\n",
    "        super(RNN,self).__init__(name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bf79c281-d69c-499d-8833-15fcd559efb5",
   "metadata": {
    "id": "bf79c281-d69c-499d-8833-15fcd559efb5",
    "outputId": "b3b97a56-ec4b-4691-ee30-b34c34857abe"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'\\nembedding_layer = layers.Embedding(\\n    max_tokens,\\n    embedding_dim,\\n    embeddings_initializer=keras.initializers.Constant(embedding_matrix),\\n    trainable=False,\\n    mask_zero=True,\\n)\\n'"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'''\n",
    "embedding_layer = layers.Embedding(\n",
    "    max_tokens,\n",
    "    embedding_dim,\n",
    "    embeddings_initializer=keras.initializers.Constant(embedding_matrix),\n",
    "    trainable=False,\n",
    "    mask_zero=True,\n",
    ")\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ad67ac71-ee24-4d36-b14b-23e2f8f9f6bf",
   "metadata": {
    "id": "ad67ac71-ee24-4d36-b14b-23e2f8f9f6bf"
   },
   "outputs": [],
   "source": [
    "def build_model(input_shape):\n",
    "    inputs = keras.Input(shape=input_shape)\n",
    "\n",
    "    # embedded = embedding_layer(inputs)\n",
    "    x = layers.LayerNormalization()(inputs)\n",
    "    x = layers.Dropout(0.3)(x)\n",
    "    # 双向LSTM\n",
    "    x = layers.Bidirectional(layers.LSTM(64))(x)\n",
    "    x = layers.LayerNormalization()(x)  \n",
    "\n",
    "    x = layers.Dense(128)(x) #,kernel_regularizer=regularizers.l1(0.0001)\n",
    "    x = layers.BatchNormalization()(x)\n",
    "    x = layers.Activation(\"relu\")(x)\n",
    "    x = layers.Dropout(0.5)(x)\n",
    "    outputs = layers.Dense(1, activation=\"sigmoid\")(x)\n",
    "    model = keras.Model(inputs, outputs)\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d671a327-eec6-45cf-b357-e2f8c13fdb85",
   "metadata": {
    "id": "d671a327-eec6-45cf-b357-e2f8c13fdb85"
   },
   "outputs": [],
   "source": [
    "# 回调(同时监视验证集的目标函数和准确率)\n",
    "callbacks_list = [\n",
    "    # keras.callbacks.EarlyStopping(\n",
    "    #     monitor=\"val_accuracy\",\n",
    "    #     patience=5,              # 可以容忍5轮没有改善\n",
    "    # ),                      # 分类用accuracy，回归的话一般不会使用这个指标\n",
    "    keras.callbacks.ReduceLROnPlateau(\n",
    "        monitor= 'val_loss',     # 监视的指标是验证集的损失函数\n",
    "        factor = 0.2,            # 促发时将学习率除以5\n",
    "        patience = 10,           # 可以容忍10轮没有改善\n",
    "    )\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ec4d39c9-3495-45b7-ae04-e1e6da306447",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 3481,
     "status": "ok",
     "timestamp": 1649897156695,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "ec4d39c9-3495-45b7-ae04-e1e6da306447",
    "outputId": "02d11092-1960-4a01-d212-aabafab00b87"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " input_1 (InputLayer)        [(None, 9, 25)]           0         \n",
      "                                                                 \n",
      " layer_normalization (LayerN  (None, 9, 25)            50        \n",
      " ormalization)                                                   \n",
      "                                                                 \n",
      " dropout (Dropout)           (None, 9, 25)             0         \n",
      "                                                                 \n",
      " bidirectional (Bidirectiona  (None, 128)              46080     \n",
      " l)                                                              \n",
      "                                                                 \n",
      " layer_normalization_1 (Laye  (None, 128)              256       \n",
      " rNormalization)                                                 \n",
      "                                                                 \n",
      " dense (Dense)               (None, 128)               16512     \n",
      "                                                                 \n",
      " batch_normalization (BatchN  (None, 128)              512       \n",
      " ormalization)                                                   \n",
      "                                                                 \n",
      " activation (Activation)     (None, 128)               0         \n",
      "                                                                 \n",
      " dropout_1 (Dropout)         (None, 128)               0         \n",
      "                                                                 \n",
      " dense_1 (Dense)             (None, 1)                 129       \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 63,539\n",
      "Trainable params: 63,283\n",
      "Non-trainable params: 256\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = build_model((9,25))\n",
    "# tf.config.experimental_run_functions_eagerly(True)\n",
    "model.compile(optimizer='RMSProp',\n",
    "              loss = 'mse',               # 因为是回归问题所以不采用分类交叉熵\n",
    "               metrics = ['mse'])           # accuracy是专门针对分类问题的\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7e4a4c9f-65e6-41e7-9e8c-069fdd94f1c6",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 4203338,
     "status": "ok",
     "timestamp": 1649901361567,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "7e4a4c9f-65e6-41e7-9e8c-069fdd94f1c6",
    "outputId": "d1531028-b622-44a6-b6e7-c042225c6abd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/400\n",
      "1115/1115 [==============================] - 19s 10ms/step - loss: 0.0809 - mse: 0.0809 - val_loss: 0.0778 - val_mse: 0.0778 - lr: 0.0010\n",
      "Epoch 2/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0742 - mse: 0.0742 - val_loss: 0.0821 - val_mse: 0.0821 - lr: 0.0010\n",
      "Epoch 3/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0737 - mse: 0.0737 - val_loss: 0.0772 - val_mse: 0.0772 - lr: 0.0010\n",
      "Epoch 4/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0734 - mse: 0.0734 - val_loss: 0.0778 - val_mse: 0.0778 - lr: 0.0010\n",
      "Epoch 5/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0732 - mse: 0.0732 - val_loss: 0.0755 - val_mse: 0.0755 - lr: 0.0010\n",
      "Epoch 6/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0729 - mse: 0.0729 - val_loss: 0.0757 - val_mse: 0.0757 - lr: 0.0010\n",
      "Epoch 7/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0728 - mse: 0.0728 - val_loss: 0.0747 - val_mse: 0.0747 - lr: 0.0010\n",
      "Epoch 8/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0726 - mse: 0.0726 - val_loss: 0.0760 - val_mse: 0.0760 - lr: 0.0010\n",
      "Epoch 9/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0724 - mse: 0.0724 - val_loss: 0.0728 - val_mse: 0.0728 - lr: 0.0010\n",
      "Epoch 10/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0722 - mse: 0.0722 - val_loss: 0.0762 - val_mse: 0.0762 - lr: 0.0010\n",
      "Epoch 11/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0719 - mse: 0.0719 - val_loss: 0.0718 - val_mse: 0.0718 - lr: 0.0010\n",
      "Epoch 12/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0718 - mse: 0.0718 - val_loss: 0.0735 - val_mse: 0.0735 - lr: 0.0010\n",
      "Epoch 13/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0717 - mse: 0.0717 - val_loss: 0.0753 - val_mse: 0.0753 - lr: 0.0010\n",
      "Epoch 14/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0715 - mse: 0.0715 - val_loss: 0.0715 - val_mse: 0.0715 - lr: 0.0010\n",
      "Epoch 15/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0714 - mse: 0.0714 - val_loss: 0.0726 - val_mse: 0.0726 - lr: 0.0010\n",
      "Epoch 16/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0713 - mse: 0.0713 - val_loss: 0.0726 - val_mse: 0.0726 - lr: 0.0010\n",
      "Epoch 17/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0712 - mse: 0.0712 - val_loss: 0.0714 - val_mse: 0.0714 - lr: 0.0010\n",
      "Epoch 18/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0710 - mse: 0.0710 - val_loss: 0.0718 - val_mse: 0.0718 - lr: 0.0010\n",
      "Epoch 19/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0708 - mse: 0.0708 - val_loss: 0.0705 - val_mse: 0.0705 - lr: 0.0010\n",
      "Epoch 20/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0707 - mse: 0.0707 - val_loss: 0.0701 - val_mse: 0.0701 - lr: 0.0010\n",
      "Epoch 21/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0706 - mse: 0.0706 - val_loss: 0.0716 - val_mse: 0.0716 - lr: 0.0010\n",
      "Epoch 22/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0704 - mse: 0.0704 - val_loss: 0.0704 - val_mse: 0.0704 - lr: 0.0010\n",
      "Epoch 23/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0704 - mse: 0.0704 - val_loss: 0.0703 - val_mse: 0.0703 - lr: 0.0010\n",
      "Epoch 24/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0700 - mse: 0.0700 - val_loss: 0.0699 - val_mse: 0.0699 - lr: 0.0010\n",
      "Epoch 25/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0701 - mse: 0.0701 - val_loss: 0.0694 - val_mse: 0.0694 - lr: 0.0010\n",
      "Epoch 26/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0700 - mse: 0.0700 - val_loss: 0.0708 - val_mse: 0.0708 - lr: 0.0010\n",
      "Epoch 27/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0699 - mse: 0.0699 - val_loss: 0.0701 - val_mse: 0.0701 - lr: 0.0010\n",
      "Epoch 28/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0698 - mse: 0.0698 - val_loss: 0.0701 - val_mse: 0.0701 - lr: 0.0010\n",
      "Epoch 29/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0695 - mse: 0.0695 - val_loss: 0.0689 - val_mse: 0.0689 - lr: 0.0010\n",
      "Epoch 30/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0693 - mse: 0.0693 - val_loss: 0.0708 - val_mse: 0.0708 - lr: 0.0010\n",
      "Epoch 31/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0692 - mse: 0.0692 - val_loss: 0.0688 - val_mse: 0.0688 - lr: 0.0010\n",
      "Epoch 32/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0690 - mse: 0.0690 - val_loss: 0.0682 - val_mse: 0.0682 - lr: 0.0010\n",
      "Epoch 33/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0690 - mse: 0.0690 - val_loss: 0.0682 - val_mse: 0.0682 - lr: 0.0010\n",
      "Epoch 34/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0688 - mse: 0.0688 - val_loss: 0.0685 - val_mse: 0.0685 - lr: 0.0010\n",
      "Epoch 35/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0685 - mse: 0.0685 - val_loss: 0.0681 - val_mse: 0.0681 - lr: 0.0010\n",
      "Epoch 36/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0683 - mse: 0.0683 - val_loss: 0.0691 - val_mse: 0.0691 - lr: 0.0010\n",
      "Epoch 37/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0681 - mse: 0.0681 - val_loss: 0.0676 - val_mse: 0.0676 - lr: 0.0010\n",
      "Epoch 38/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0679 - mse: 0.0679 - val_loss: 0.0683 - val_mse: 0.0683 - lr: 0.0010\n",
      "Epoch 39/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0677 - mse: 0.0677 - val_loss: 0.0683 - val_mse: 0.0683 - lr: 0.0010\n",
      "Epoch 40/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0675 - mse: 0.0675 - val_loss: 0.0682 - val_mse: 0.0682 - lr: 0.0010\n",
      "Epoch 41/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0673 - mse: 0.0673 - val_loss: 0.0670 - val_mse: 0.0670 - lr: 0.0010\n",
      "Epoch 42/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0672 - mse: 0.0672 - val_loss: 0.0665 - val_mse: 0.0665 - lr: 0.0010\n",
      "Epoch 43/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0669 - mse: 0.0669 - val_loss: 0.0666 - val_mse: 0.0666 - lr: 0.0010\n",
      "Epoch 44/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0666 - mse: 0.0666 - val_loss: 0.0665 - val_mse: 0.0665 - lr: 0.0010\n",
      "Epoch 45/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0664 - mse: 0.0664 - val_loss: 0.0660 - val_mse: 0.0660 - lr: 0.0010\n",
      "Epoch 46/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0661 - mse: 0.0661 - val_loss: 0.0675 - val_mse: 0.0675 - lr: 0.0010\n",
      "Epoch 47/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0658 - mse: 0.0658 - val_loss: 0.0662 - val_mse: 0.0662 - lr: 0.0010\n",
      "Epoch 48/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0657 - mse: 0.0657 - val_loss: 0.0658 - val_mse: 0.0658 - lr: 0.0010\n",
      "Epoch 49/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0655 - mse: 0.0655 - val_loss: 0.0664 - val_mse: 0.0664 - lr: 0.0010\n",
      "Epoch 50/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0653 - mse: 0.0653 - val_loss: 0.0695 - val_mse: 0.0695 - lr: 0.0010\n",
      "Epoch 51/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0651 - mse: 0.0651 - val_loss: 0.0655 - val_mse: 0.0655 - lr: 0.0010\n",
      "Epoch 52/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0650 - mse: 0.0650 - val_loss: 0.0651 - val_mse: 0.0651 - lr: 0.0010\n",
      "Epoch 53/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0645 - mse: 0.0645 - val_loss: 0.0645 - val_mse: 0.0645 - lr: 0.0010\n",
      "Epoch 54/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0643 - mse: 0.0643 - val_loss: 0.0643 - val_mse: 0.0643 - lr: 0.0010\n",
      "Epoch 55/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0642 - mse: 0.0642 - val_loss: 0.0689 - val_mse: 0.0689 - lr: 0.0010\n",
      "Epoch 56/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0638 - mse: 0.0638 - val_loss: 0.0645 - val_mse: 0.0645 - lr: 0.0010\n",
      "Epoch 57/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0637 - mse: 0.0637 - val_loss: 0.0662 - val_mse: 0.0662 - lr: 0.0010\n",
      "Epoch 58/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0634 - mse: 0.0634 - val_loss: 0.0647 - val_mse: 0.0647 - lr: 0.0010\n",
      "Epoch 59/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0632 - mse: 0.0632 - val_loss: 0.0635 - val_mse: 0.0635 - lr: 0.0010\n",
      "Epoch 60/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0631 - mse: 0.0631 - val_loss: 0.0636 - val_mse: 0.0636 - lr: 0.0010\n",
      "Epoch 61/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0628 - mse: 0.0628 - val_loss: 0.0634 - val_mse: 0.0634 - lr: 0.0010\n",
      "Epoch 62/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0626 - mse: 0.0626 - val_loss: 0.0629 - val_mse: 0.0629 - lr: 0.0010\n",
      "Epoch 63/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0624 - mse: 0.0624 - val_loss: 0.0630 - val_mse: 0.0630 - lr: 0.0010\n",
      "Epoch 64/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0620 - mse: 0.0620 - val_loss: 0.0640 - val_mse: 0.0640 - lr: 0.0010\n",
      "Epoch 65/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0620 - mse: 0.0620 - val_loss: 0.0627 - val_mse: 0.0627 - lr: 0.0010\n",
      "Epoch 66/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0616 - mse: 0.0616 - val_loss: 0.0634 - val_mse: 0.0634 - lr: 0.0010\n",
      "Epoch 67/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0615 - mse: 0.0615 - val_loss: 0.0635 - val_mse: 0.0635 - lr: 0.0010\n",
      "Epoch 68/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0612 - mse: 0.0612 - val_loss: 0.0623 - val_mse: 0.0623 - lr: 0.0010\n",
      "Epoch 69/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0611 - mse: 0.0611 - val_loss: 0.0622 - val_mse: 0.0622 - lr: 0.0010\n",
      "Epoch 70/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0609 - mse: 0.0609 - val_loss: 0.0626 - val_mse: 0.0626 - lr: 0.0010\n",
      "Epoch 71/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0607 - mse: 0.0607 - val_loss: 0.0619 - val_mse: 0.0619 - lr: 0.0010\n",
      "Epoch 72/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0605 - mse: 0.0605 - val_loss: 0.0632 - val_mse: 0.0632 - lr: 0.0010\n",
      "Epoch 73/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0604 - mse: 0.0604 - val_loss: 0.0617 - val_mse: 0.0617 - lr: 0.0010\n",
      "Epoch 74/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0601 - mse: 0.0601 - val_loss: 0.0623 - val_mse: 0.0623 - lr: 0.0010\n",
      "Epoch 75/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0599 - mse: 0.0599 - val_loss: 0.0612 - val_mse: 0.0612 - lr: 0.0010\n",
      "Epoch 76/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0598 - mse: 0.0598 - val_loss: 0.0616 - val_mse: 0.0616 - lr: 0.0010\n",
      "Epoch 77/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0597 - mse: 0.0597 - val_loss: 0.0611 - val_mse: 0.0611 - lr: 0.0010\n",
      "Epoch 78/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0595 - mse: 0.0595 - val_loss: 0.0626 - val_mse: 0.0626 - lr: 0.0010\n",
      "Epoch 79/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0594 - mse: 0.0594 - val_loss: 0.0618 - val_mse: 0.0618 - lr: 0.0010\n",
      "Epoch 80/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0592 - mse: 0.0592 - val_loss: 0.0624 - val_mse: 0.0624 - lr: 0.0010\n",
      "Epoch 81/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0589 - mse: 0.0589 - val_loss: 0.0620 - val_mse: 0.0620 - lr: 0.0010\n",
      "Epoch 82/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0587 - mse: 0.0587 - val_loss: 0.0609 - val_mse: 0.0609 - lr: 0.0010\n",
      "Epoch 83/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0588 - mse: 0.0588 - val_loss: 0.0607 - val_mse: 0.0607 - lr: 0.0010\n",
      "Epoch 84/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0584 - mse: 0.0584 - val_loss: 0.0605 - val_mse: 0.0605 - lr: 0.0010\n",
      "Epoch 85/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0583 - mse: 0.0583 - val_loss: 0.0609 - val_mse: 0.0609 - lr: 0.0010\n",
      "Epoch 86/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0581 - mse: 0.0581 - val_loss: 0.0603 - val_mse: 0.0603 - lr: 0.0010\n",
      "Epoch 87/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0580 - mse: 0.0580 - val_loss: 0.0613 - val_mse: 0.0613 - lr: 0.0010\n",
      "Epoch 88/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0578 - mse: 0.0578 - val_loss: 0.0617 - val_mse: 0.0617 - lr: 0.0010\n",
      "Epoch 89/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0578 - mse: 0.0578 - val_loss: 0.0635 - val_mse: 0.0635 - lr: 0.0010\n",
      "Epoch 90/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0577 - mse: 0.0577 - val_loss: 0.0602 - val_mse: 0.0602 - lr: 0.0010\n",
      "Epoch 91/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0577 - mse: 0.0577 - val_loss: 0.0602 - val_mse: 0.0602 - lr: 0.0010\n",
      "Epoch 92/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0575 - mse: 0.0575 - val_loss: 0.0615 - val_mse: 0.0615 - lr: 0.0010\n",
      "Epoch 93/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0573 - mse: 0.0573 - val_loss: 0.0596 - val_mse: 0.0596 - lr: 0.0010\n",
      "Epoch 94/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0573 - mse: 0.0573 - val_loss: 0.0597 - val_mse: 0.0597 - lr: 0.0010\n",
      "Epoch 95/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0570 - mse: 0.0570 - val_loss: 0.0613 - val_mse: 0.0613 - lr: 0.0010\n",
      "Epoch 96/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0571 - mse: 0.0571 - val_loss: 0.0611 - val_mse: 0.0611 - lr: 0.0010\n",
      "Epoch 97/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0568 - mse: 0.0568 - val_loss: 0.0597 - val_mse: 0.0597 - lr: 0.0010\n",
      "Epoch 98/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0567 - mse: 0.0567 - val_loss: 0.0595 - val_mse: 0.0595 - lr: 0.0010\n",
      "Epoch 99/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0566 - mse: 0.0566 - val_loss: 0.0603 - val_mse: 0.0603 - lr: 0.0010\n",
      "Epoch 100/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0566 - mse: 0.0566 - val_loss: 0.0613 - val_mse: 0.0613 - lr: 0.0010\n",
      "Epoch 101/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0565 - mse: 0.0565 - val_loss: 0.0596 - val_mse: 0.0596 - lr: 0.0010\n",
      "Epoch 102/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0563 - mse: 0.0563 - val_loss: 0.0597 - val_mse: 0.0597 - lr: 0.0010\n",
      "Epoch 103/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0563 - mse: 0.0563 - val_loss: 0.0607 - val_mse: 0.0607 - lr: 0.0010\n",
      "Epoch 104/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0561 - mse: 0.0561 - val_loss: 0.0609 - val_mse: 0.0609 - lr: 0.0010\n",
      "Epoch 105/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0560 - mse: 0.0560 - val_loss: 0.0608 - val_mse: 0.0608 - lr: 0.0010\n",
      "Epoch 106/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0559 - mse: 0.0559 - val_loss: 0.0599 - val_mse: 0.0599 - lr: 0.0010\n",
      "Epoch 107/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0559 - mse: 0.0559 - val_loss: 0.0624 - val_mse: 0.0624 - lr: 0.0010\n",
      "Epoch 108/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0557 - mse: 0.0557 - val_loss: 0.0595 - val_mse: 0.0595 - lr: 0.0010\n",
      "Epoch 109/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0540 - mse: 0.0540 - val_loss: 0.0586 - val_mse: 0.0586 - lr: 2.0000e-04\n",
      "Epoch 110/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0535 - mse: 0.0535 - val_loss: 0.0588 - val_mse: 0.0588 - lr: 2.0000e-04\n",
      "Epoch 111/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0533 - mse: 0.0533 - val_loss: 0.0587 - val_mse: 0.0587 - lr: 2.0000e-04\n",
      "Epoch 112/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0533 - mse: 0.0533 - val_loss: 0.0588 - val_mse: 0.0588 - lr: 2.0000e-04\n",
      "Epoch 113/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0532 - mse: 0.0532 - val_loss: 0.0587 - val_mse: 0.0587 - lr: 2.0000e-04\n",
      "Epoch 114/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0530 - mse: 0.0530 - val_loss: 0.0585 - val_mse: 0.0585 - lr: 2.0000e-04\n",
      "Epoch 115/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0531 - mse: 0.0531 - val_loss: 0.0587 - val_mse: 0.0587 - lr: 2.0000e-04\n",
      "Epoch 116/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0530 - mse: 0.0530 - val_loss: 0.0584 - val_mse: 0.0584 - lr: 2.0000e-04\n",
      "Epoch 117/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0529 - mse: 0.0529 - val_loss: 0.0585 - val_mse: 0.0585 - lr: 2.0000e-04\n",
      "Epoch 118/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0530 - mse: 0.0530 - val_loss: 0.0585 - val_mse: 0.0585 - lr: 2.0000e-04\n",
      "Epoch 119/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0530 - mse: 0.0530 - val_loss: 0.0588 - val_mse: 0.0588 - lr: 2.0000e-04\n",
      "Epoch 120/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0528 - mse: 0.0528 - val_loss: 0.0584 - val_mse: 0.0584 - lr: 2.0000e-04\n",
      "Epoch 121/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0528 - mse: 0.0528 - val_loss: 0.0584 - val_mse: 0.0584 - lr: 2.0000e-04\n",
      "Epoch 122/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0527 - mse: 0.0527 - val_loss: 0.0585 - val_mse: 0.0585 - lr: 2.0000e-04\n",
      "Epoch 123/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0526 - mse: 0.0526 - val_loss: 0.0583 - val_mse: 0.0583 - lr: 2.0000e-04\n",
      "Epoch 124/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0527 - mse: 0.0527 - val_loss: 0.0585 - val_mse: 0.0585 - lr: 2.0000e-04\n",
      "Epoch 125/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0529 - mse: 0.0529 - val_loss: 0.0584 - val_mse: 0.0584 - lr: 2.0000e-04\n",
      "Epoch 126/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0526 - mse: 0.0526 - val_loss: 0.0584 - val_mse: 0.0584 - lr: 2.0000e-04\n",
      "Epoch 127/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0525 - mse: 0.0525 - val_loss: 0.0583 - val_mse: 0.0583 - lr: 2.0000e-04\n",
      "Epoch 128/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0526 - mse: 0.0526 - val_loss: 0.0583 - val_mse: 0.0583 - lr: 2.0000e-04\n",
      "Epoch 129/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0526 - mse: 0.0526 - val_loss: 0.0583 - val_mse: 0.0583 - lr: 2.0000e-04\n",
      "Epoch 130/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0524 - mse: 0.0524 - val_loss: 0.0586 - val_mse: 0.0586 - lr: 2.0000e-04\n",
      "Epoch 131/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0524 - mse: 0.0524 - val_loss: 0.0583 - val_mse: 0.0583 - lr: 2.0000e-04\n",
      "Epoch 132/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0525 - mse: 0.0525 - val_loss: 0.0589 - val_mse: 0.0589 - lr: 2.0000e-04\n",
      "Epoch 133/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0523 - mse: 0.0523 - val_loss: 0.0584 - val_mse: 0.0584 - lr: 2.0000e-04\n",
      "Epoch 134/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0519 - mse: 0.0519 - val_loss: 0.0583 - val_mse: 0.0583 - lr: 4.0000e-05\n",
      "Epoch 135/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0520 - mse: 0.0520 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 136/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0519 - mse: 0.0519 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 137/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.0000e-05\n",
      "Epoch 138/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0519 - mse: 0.0519 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 139/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 140/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.0000e-05\n",
      "Epoch 141/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0519 - mse: 0.0519 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 142/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 143/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 144/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 145/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0000e-05\n",
      "Epoch 146/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 147/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 148/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 149/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 150/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 151/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 152/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 153/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 154/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 155/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.0000e-06\n",
      "Epoch 156/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6000e-06\n",
      "Epoch 157/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6000e-06\n",
      "Epoch 158/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6000e-06\n",
      "Epoch 159/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6000e-06\n",
      "Epoch 160/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6000e-06\n",
      "Epoch 161/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6000e-06\n",
      "Epoch 162/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6000e-06\n",
      "Epoch 163/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6000e-06\n",
      "Epoch 164/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6000e-06\n",
      "Epoch 165/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6000e-06\n",
      "Epoch 166/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2000e-07\n",
      "Epoch 167/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2000e-07\n",
      "Epoch 168/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2000e-07\n",
      "Epoch 169/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2000e-07\n",
      "Epoch 170/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2000e-07\n",
      "Epoch 171/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2000e-07\n",
      "Epoch 172/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0514 - mse: 0.0514 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2000e-07\n",
      "Epoch 173/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2000e-07\n",
      "Epoch 174/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2000e-07\n",
      "Epoch 175/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2000e-07\n",
      "Epoch 176/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.4000e-08\n",
      "Epoch 177/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.4000e-08\n",
      "Epoch 178/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.4000e-08\n",
      "Epoch 179/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.4000e-08\n",
      "Epoch 180/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.4000e-08\n",
      "Epoch 181/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.4000e-08\n",
      "Epoch 182/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.4000e-08\n",
      "Epoch 183/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.4000e-08\n",
      "Epoch 184/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.4000e-08\n",
      "Epoch 185/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.4000e-08\n",
      "Epoch 186/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.2800e-08\n",
      "Epoch 187/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.2800e-08\n",
      "Epoch 188/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.2800e-08\n",
      "Epoch 189/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.2800e-08\n",
      "Epoch 190/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.2800e-08\n",
      "Epoch 191/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.2800e-08\n",
      "Epoch 192/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.2800e-08\n",
      "Epoch 193/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.2800e-08\n",
      "Epoch 194/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.2800e-08\n",
      "Epoch 195/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.2800e-08\n",
      "Epoch 196/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.5600e-09\n",
      "Epoch 197/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.5600e-09\n",
      "Epoch 198/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.5600e-09\n",
      "Epoch 199/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.5600e-09\n",
      "Epoch 200/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.5600e-09\n",
      "Epoch 201/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.5600e-09\n",
      "Epoch 202/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.5600e-09\n",
      "Epoch 203/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.5600e-09\n",
      "Epoch 204/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.5600e-09\n",
      "Epoch 205/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.5600e-09\n",
      "Epoch 206/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 5.1200e-10\n",
      "Epoch 207/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.1200e-10\n",
      "Epoch 208/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.1200e-10\n",
      "Epoch 209/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.1200e-10\n",
      "Epoch 210/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.1200e-10\n",
      "Epoch 211/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0514 - mse: 0.0514 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.1200e-10\n",
      "Epoch 212/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 5.1200e-10\n",
      "Epoch 213/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.1200e-10\n",
      "Epoch 214/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.1200e-10\n",
      "Epoch 215/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.1200e-10\n",
      "Epoch 216/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0240e-10\n",
      "Epoch 217/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0240e-10\n",
      "Epoch 218/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0240e-10\n",
      "Epoch 219/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0240e-10\n",
      "Epoch 220/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0240e-10\n",
      "Epoch 221/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0240e-10\n",
      "Epoch 222/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0240e-10\n",
      "Epoch 223/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0240e-10\n",
      "Epoch 224/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0240e-10\n",
      "Epoch 225/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0240e-10\n",
      "Epoch 226/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.0480e-11\n",
      "Epoch 227/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0480e-11\n",
      "Epoch 228/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0480e-11\n",
      "Epoch 229/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0480e-11\n",
      "Epoch 230/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.0480e-11\n",
      "Epoch 231/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.0480e-11\n",
      "Epoch 232/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0480e-11\n",
      "Epoch 233/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0480e-11\n",
      "Epoch 234/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0480e-11\n",
      "Epoch 235/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.0480e-11\n",
      "Epoch 236/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0960e-12\n",
      "Epoch 237/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0960e-12\n",
      "Epoch 238/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.0960e-12\n",
      "Epoch 239/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0960e-12\n",
      "Epoch 240/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0960e-12\n",
      "Epoch 241/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0960e-12\n",
      "Epoch 242/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0960e-12\n",
      "Epoch 243/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.0960e-12\n",
      "Epoch 244/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.0960e-12\n",
      "Epoch 245/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.0960e-12\n",
      "Epoch 246/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.1920e-13\n",
      "Epoch 247/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.1920e-13\n",
      "Epoch 248/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.1920e-13\n",
      "Epoch 249/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.1920e-13\n",
      "Epoch 250/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.1920e-13\n",
      "Epoch 251/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.1920e-13\n",
      "Epoch 252/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.1920e-13\n",
      "Epoch 253/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.1920e-13\n",
      "Epoch 254/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.1920e-13\n",
      "Epoch 255/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.1920e-13\n",
      "Epoch 256/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6384e-13\n",
      "Epoch 257/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6384e-13\n",
      "Epoch 258/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6384e-13\n",
      "Epoch 259/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6384e-13\n",
      "Epoch 260/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6384e-13\n",
      "Epoch 261/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6384e-13\n",
      "Epoch 262/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6384e-13\n",
      "Epoch 263/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6384e-13\n",
      "Epoch 264/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6384e-13\n",
      "Epoch 265/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6384e-13\n",
      "Epoch 266/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2768e-14\n",
      "Epoch 267/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2768e-14\n",
      "Epoch 268/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2768e-14\n",
      "Epoch 269/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2768e-14\n",
      "Epoch 270/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2768e-14\n",
      "Epoch 271/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2768e-14\n",
      "Epoch 272/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.2768e-14\n",
      "Epoch 273/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2768e-14\n",
      "Epoch 274/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2768e-14\n",
      "Epoch 275/400\n",
      "1115/1115 [==============================] - 10s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.2768e-14\n",
      "Epoch 276/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.5536e-15\n",
      "Epoch 277/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.5536e-15\n",
      "Epoch 278/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.5536e-15\n",
      "Epoch 279/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.5536e-15\n",
      "Epoch 280/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.5536e-15\n",
      "Epoch 281/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.5536e-15\n",
      "Epoch 282/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.5536e-15\n",
      "Epoch 283/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.5536e-15\n",
      "Epoch 284/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.5536e-15\n",
      "Epoch 285/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.5536e-15\n",
      "Epoch 286/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3107e-15\n",
      "Epoch 287/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.3107e-15\n",
      "Epoch 288/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3107e-15\n",
      "Epoch 289/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3107e-15\n",
      "Epoch 290/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.3107e-15\n",
      "Epoch 291/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3107e-15\n",
      "Epoch 292/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3107e-15\n",
      "Epoch 293/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.3107e-15\n",
      "Epoch 294/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3107e-15\n",
      "Epoch 295/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3107e-15\n",
      "Epoch 296/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.6214e-16\n",
      "Epoch 297/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6214e-16\n",
      "Epoch 298/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6214e-16\n",
      "Epoch 299/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6214e-16\n",
      "Epoch 300/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6214e-16\n",
      "Epoch 301/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6214e-16\n",
      "Epoch 302/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6214e-16\n",
      "Epoch 303/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.6214e-16\n",
      "Epoch 304/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6214e-16\n",
      "Epoch 305/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6214e-16\n",
      "Epoch 306/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 307/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 308/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 309/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 310/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 311/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 312/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 5.2429e-17\n",
      "Epoch 313/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 314/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 315/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 5.2429e-17\n",
      "Epoch 316/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0486e-17\n",
      "Epoch 317/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0486e-17\n",
      "Epoch 318/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0486e-17\n",
      "Epoch 319/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0486e-17\n",
      "Epoch 320/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.0486e-17\n",
      "Epoch 321/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0486e-17\n",
      "Epoch 322/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0486e-17\n",
      "Epoch 323/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0486e-17\n",
      "Epoch 324/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0486e-17\n",
      "Epoch 325/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.0486e-17\n",
      "Epoch 326/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0972e-18\n",
      "Epoch 327/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0972e-18\n",
      "Epoch 328/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.0972e-18\n",
      "Epoch 329/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0972e-18\n",
      "Epoch 330/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0972e-18\n",
      "Epoch 331/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0972e-18\n",
      "Epoch 332/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.0972e-18\n",
      "Epoch 333/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0972e-18\n",
      "Epoch 334/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.0972e-18\n",
      "Epoch 335/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.0972e-18\n",
      "Epoch 336/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.1943e-19\n",
      "Epoch 337/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.1943e-19\n",
      "Epoch 338/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.1943e-19\n",
      "Epoch 339/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.1943e-19\n",
      "Epoch 340/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.1943e-19\n",
      "Epoch 341/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.1943e-19\n",
      "Epoch 342/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.1943e-19\n",
      "Epoch 343/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 4.1943e-19\n",
      "Epoch 344/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.1943e-19\n",
      "Epoch 345/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 4.1943e-19\n",
      "Epoch 346/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.3886e-20\n",
      "Epoch 347/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.3886e-20\n",
      "Epoch 348/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.3886e-20\n",
      "Epoch 349/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.3886e-20\n",
      "Epoch 350/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.3886e-20\n",
      "Epoch 351/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.3886e-20\n",
      "Epoch 352/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.3886e-20\n",
      "Epoch 353/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 8.3886e-20\n",
      "Epoch 354/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.3886e-20\n",
      "Epoch 355/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 8.3886e-20\n",
      "Epoch 356/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6777e-20\n",
      "Epoch 357/400\n",
      "1115/1115 [==============================] - 11s 9ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6777e-20\n",
      "Epoch 358/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6777e-20\n",
      "Epoch 359/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6777e-20\n",
      "Epoch 360/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6777e-20\n",
      "Epoch 361/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6777e-20\n",
      "Epoch 362/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6777e-20\n",
      "Epoch 363/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.6777e-20\n",
      "Epoch 364/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6777e-20\n",
      "Epoch 365/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.6777e-20\n",
      "Epoch 366/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.3554e-21\n",
      "Epoch 367/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.3554e-21\n",
      "Epoch 368/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.3554e-21\n",
      "Epoch 369/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.3554e-21\n",
      "Epoch 370/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.3554e-21\n",
      "Epoch 371/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.3554e-21\n",
      "Epoch 372/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.3554e-21\n",
      "Epoch 373/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.3554e-21\n",
      "Epoch 374/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 3.3554e-21\n",
      "Epoch 375/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 3.3554e-21\n",
      "Epoch 376/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.7109e-22\n",
      "Epoch 377/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.7109e-22\n",
      "Epoch 378/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.7109e-22\n",
      "Epoch 379/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.7109e-22\n",
      "Epoch 380/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.7109e-22\n",
      "Epoch 381/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 6.7109e-22\n",
      "Epoch 382/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0514 - mse: 0.0514 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.7109e-22\n",
      "Epoch 383/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.7109e-22\n",
      "Epoch 384/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.7109e-22\n",
      "Epoch 385/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 6.7109e-22\n",
      "Epoch 386/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3422e-22\n",
      "Epoch 387/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.3422e-22\n",
      "Epoch 388/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0519 - mse: 0.0519 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3422e-22\n",
      "Epoch 389/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.3422e-22\n",
      "Epoch 390/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3422e-22\n",
      "Epoch 391/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.3422e-22\n",
      "Epoch 392/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3422e-22\n",
      "Epoch 393/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3422e-22\n",
      "Epoch 394/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 1.3422e-22\n",
      "Epoch 395/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 1.3422e-22\n",
      "Epoch 396/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0518 - mse: 0.0518 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6844e-23\n",
      "Epoch 397/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6844e-23\n",
      "Epoch 398/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0516 - mse: 0.0516 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6844e-23\n",
      "Epoch 399/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0517 - mse: 0.0517 - val_loss: 0.0582 - val_mse: 0.0582 - lr: 2.6844e-23\n",
      "Epoch 400/400\n",
      "1115/1115 [==============================] - 11s 10ms/step - loss: 0.0515 - mse: 0.0515 - val_loss: 0.0581 - val_mse: 0.0581 - lr: 2.6844e-23\n"
     ]
    }
   ],
   "source": [
    "# tf.config.experimental_run_functions_eagerly(True)\n",
    "Fitting_history = model.fit(X_train,Y_train,\n",
    "            batch_size=128,\n",
    "            epochs=400,validation_split=0.2,\n",
    "            callbacks=callbacks_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "32291a55-9794-4c1c-ad6b-3b6ae80377f3",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 388
    },
    "executionInfo": {
     "elapsed": 916,
     "status": "ok",
     "timestamp": 1649902133466,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "32291a55-9794-4c1c-ad6b-3b6ae80377f3",
    "outputId": "1875b351-80dd-46cc-99cd-29d71e23062e"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 936x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "loss = Fitting_history.history['loss']\n",
    "val_loss = Fitting_history.history['val_loss']\n",
    "val_mse = Fitting_history.history['val_mse']\n",
    "mse = Fitting_history.history['mse']\n",
    "epochs=range(1,len(loss)+1)\n",
    "plt.figure(figsize=(13,6))\n",
    "plt.subplot(1,2,1)\n",
    "plt.plot(epochs,loss,'b--',label='loss')\n",
    "plt.plot(epochs,val_loss,'r',label='val_loss')\n",
    "plt.legend()\n",
    "plt.xlabel('epochs')\n",
    "plt.subplot(1,2,2)\n",
    "plt.plot(epochs,mse,'g--',label='mse')\n",
    "plt.plot(epochs,val_mse,'m',label='val_mse')\n",
    "plt.legend()\n",
    "plt.xlabel('epochs')\n",
    "plt.savefig('temp_4.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bXhwX1Xoy5YY",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 35
    },
    "executionInfo": {
     "elapsed": 386,
     "status": "ok",
     "timestamp": 1649901571984,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "bXhwX1Xoy5YY",
    "outputId": "bbf7669e-f1d6-4c2c-889e-582f6021290e"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.savefig('temp.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "tcdQcV7-42ra",
   "metadata": {
    "id": "tcdQcV7-42ra"
   },
   "outputs": [],
   "source": [
    "model_json = model.to_json()\n",
    "with open('Model_LSTM.json','w') as json_file:\n",
    "  json_file.write(model_json)\n",
    "model.save_weights('Model_LSTM_weights.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "THrxmNyNPkXQ",
   "metadata": {
    "id": "THrxmNyNPkXQ"
   },
   "outputs": [],
   "source": [
    "# load the model\n",
    "from tensorflow.keras.models import model_from_json\n",
    "model_architecture = '/content/gdrive/MyDrive/modeling/Model_LSTM.json'\n",
    "model_weights = '/content/gdrive/MyDrive/modeling/Model_LSTM_weights.h5'\n",
    "model_LSTM = model_from_json(open(model_architecture).read())\n",
    "model_LSTM.load_weights(model_weights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "NTwv5cbSURGu",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 22883,
     "status": "ok",
     "timestamp": 1652091376942,
     "user": {
      "displayName": "Jayden Baxter",
      "userId": "11604221609513949563"
     },
     "user_tz": -480
    },
    "id": "NTwv5cbSURGu",
    "outputId": "4081a056-3b9f-4c51-e999-bcc93f3b20f3"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.059409362477793604"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import mean_squared_error\n",
    "y_pred = model_LSTM.predict(X_test)\n",
    "y_true = Y_test\n",
    "mean_squared_error(y_true,y_pred)"
   ]
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "collapsed_sections": [],
   "name": "基础模型.ipynb",
   "provenance": [],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
